wayland: Fix initial cursor
authorBenjamin Otte <otte@redhat.com>
Wed, 15 Nov 2017 18:05:48 +0000 (19:05 +0100)
committerBenjamin Otte <otte@redhat.com>
Wed, 15 Nov 2017 18:07:17 +0000 (19:07 +0100)
Make sure the initial cursor isn't random which would happen due to an
early exit when cursor == pointer->cursor triggered because both were
NULL.

gdk/wayland/gdkdevice-wayland.c

index c2bba21a2b607903448a542a7763f2612ef054b4..3c24ac2ab8878b7564cddb6407ae21a4d1b75afd 100644 (file)
@@ -28,6 +28,7 @@
 #include "gdkseat-wayland.h"
 #include "gdkwayland.h"
 #include "gdkkeysyms.h"
+#include "gdkcursorprivate.h"
 #include "gdkdeviceprivate.h"
 #include "gdkdevicepadprivate.h"
 #include "gdkdevicetoolprivate.h"
@@ -501,18 +502,24 @@ gdk_wayland_device_set_window_cursor (GdkDevice *device,
   if (seat->grab_cursor)
     cursor = seat->grab_cursor;
 
-  if (cursor == pointer->cursor)
-    return;
+  if (cursor == NULL)
+    cursor = gdk_cursor_new_from_name ("default", NULL);
+  else
+    cursor = g_object_ref (cursor);
+
+  if (pointer->cursor != NULL &&
+      gdk_cursor_equal (cursor, pointer->cursor))
+    {
+      g_object_unref (cursor);
+      return;
+    }
 
   gdk_wayland_pointer_stop_cursor_animation (pointer);
 
   if (pointer->cursor)
     g_object_unref (pointer->cursor);
 
-  if (cursor == NULL)
-    pointer->cursor = gdk_cursor_new_from_name ("default", NULL);
-  else
-    pointer->cursor = g_object_ref (cursor);
+  pointer->cursor = cursor;
 
   gdk_wayland_device_update_window_cursor (device);
 }